import jdk.internal.org.objectweb.asm.tree.analysis.Value;

import java.util.HashMap;
import java.util.Map;

public class SumOf4NumII {
    /*
    * 四数相加II
    * 给你四个整数数组 nums1、nums2、nums3 和 nums4 ，数组长度都是 n ，
    * 请你计算有多少个元组 (i, j, k, l) 能满足：
    * 0 <= i, j, k, l < n
    * nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
    * 提示：
        n == nums1.length
        n == nums2.length
        n == nums3.length
        n == nums4.length
        1 <= n <= 200
        -2(28) <= nums1[i], nums2[i], nums3[i], nums4[i] <= 2(28)
    * */
    public static void main(String[] args){

    }

    // 我的想法：。。。想不出来，看答案
    public int solution(int[] nums1, int[] nums2, int[] nums3, int[] nums4){
        int res = 0;
        HashMap<Integer, Integer> ab = new HashMap<>();
        // 先统计1、2俩数组的和，以及出现次数，放入map中
        for(int i = 0; i<nums1.length; i++){
            for(int j = 0; j<nums2.length; j++){
                int sum = nums1[i] + nums2[j];
                Integer value = ab.get(sum);
                ab.put(sum, value==null? 1 : value+1);
            }
        }
        // 再统计3、4俩数组的和，然后去map中找有没有补值
        for (int i = 0; i < nums3.length; i++) {
            for (int j = 0; j < nums4.length; j++) {
                int sum = -(nums3[i] + nums4[j]);
                Integer value = ab.get(sum);
                res += value==null? 0 : value;
            }
        }
        return res;
    }
}
